package com.miku.blog.mapper;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.miku.blog.domain.Article;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.miku.blog.domain.Tag;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
* @author Miku
* @description 针对表【tb_article】的数据库操作Mapper
* @createDate 2022-05-26 17:52:39
* @Entity com.miku.blog.domain.Article
*/
public interface ArticleMapper extends BaseMapper<Article> {

    /**
     * 添加文章标签-关联表对应记录
     * @param articleId
     */
    boolean addByArticleTagTable(@Param("articleId") Integer articleId,@Param("tagId") Integer tagId);

    /**
     * 删除文章标签-关联表对应记录
     * @param articleId
     */
    boolean deleteByArticleTagTable(@Param("articleId") Integer articleId);

    /**
     * 根据标签ID ，查询其标签下的文章列表 {后台管理}
     * @param tagId
     * @return
     */
    public List<Article> getArticleListByTagId(@Param("tagId") Integer tagId);


    /**
     * 根据标签ID ，查询其标签下的公开的文章列表 {前台博客}
     * @param tagId
     * @return
     */
    public List<Article> getArticleListByTagIdEqPublic(@Param("tagId") Integer tagId);


    /**
     * 根据标签ID ，查询其标签下的非草稿的文章列表 {前台博客}
     * @param tagId
     * @return
     */
    public List<Article> getArticleListByTagIdNeDraft(@Param("tagId") Integer tagId);


    /**
     * 根据标签ID ，查询其标签下的文章数量 {不查已删除或草稿的数量}
     * @param tagId
     * @return
     */
    long getArticleCountByTagId(@Param("tagId") Integer tagId);


    /**
     * 按创建日期分组 获取文章列表 { 已发布的 }
     *
     * 分组日期格式为 '%Y-%m-%d'   >>>> yyyy-MM-dd
     *
     * GROUP BY    DATE_FORMAT(create_time,'%Y-%m-%d')
     * @return
     */
    public List<Article> getArticleListByGroupByCreateTime();

    /**
     * 根据日期获取 文章列表 { 已发布的 }
     *
     * 日期格式必须为 '%Y-%m-%d'
     * 即 年-月-日
     * @param createTime yyyy-MM-dd
     * @return
     */
    public List<Article> getArticleListByCreateTime(@Param("createTime") String createTime);


    /**
     * 根据以下参数逻辑 或取 文章列表
     * @param page
     * @param tagId
     * @param keywords
     * @param isDelete
     * @param status
     * @param type
     * @param categoryId
     * @return
     */
    Page<Article> getArticlesByLogic(Page<Article> page,
                                   @Param("tagId") Integer tagId,
                                   @Param("keywords") String keywords,
                                   @Param("isDelete") Integer isDelete,
                                   @Param("status") Integer status,
                                   @Param("type") Integer type,
                                   @Param("categoryId") Integer categoryId);
}




